/**
 * 打开设备选项
 */
export interface OpenOptionsType {
	/**
	 * 期望的端口类型
	 * @param
	 * `LUSB`平台上的usb驱动开发，设备需要获取root权限
	 * @param
	 * `AUSB`需要app获取系统usb权限，设备无需root
	 * @param
	 * `COM`需要设备串口路径。需要设备具有串口通讯模块
	 * @param
	 * `BT`基于蓝牙RFCOMM协议进行通讯
	 * @param
	 * `BLE`基于Smart Bluetooth，需要设备蓝牙模块4.0及以上版本。
	 */
	Type?: "LUSB" | "AUSB" | "COM" | "BT" | "BLE";
	/**
	 * `Type`为`COM`时此参数为串口路径，必填
	 */
	Param?: string;
	/**
	 * `Type`为`COM`时此参数为波特率，必填
	 */
	BaudRate?: number;
};

/**
 * 读取身份证选项
 */
export interface ReadIdCardOptionsType {
	/**
	 * 类型
	 * @param
	 * 1 - 读取文字信息、相片信息和指纹信息
	 * @param
	 * 2 - 读取追加住址信息
	 * @param
	 * 3 - 读取文字信息、相片信息、指纹信息和追加住址信息
	 */
	Type?: 1 | 2 | 3;
};

/**
 * 身份证
 */
export type IDCard = {
	/**
	 * 类型
	 */
	type?: string;
	/**
	 * 姓名
	 */
	name?: string;
	/**
	 * 性别
	 */
	sex?: string;
	/**
	 * 民族
	 */
	nation?: string;
	/**
	 * 生日
	 */
	birthday?: string;
	/**
	 * 住址
	 */
	address?: string;
	/**
	 * 身份证号
	 */
	id?: string;
	/**
	 * 签发单位
	 */
	office?: string;
	/**
	 * 有效期始
	 */
	startTime?: string;
	/**
	 * 有效期止
	 */
	endTime?: string;
	/**
	 * 外国人姓名
	 */
	foreign_name?: string;
	/**
	 * 外国人性别
	 */
	foreign_sex?: string;
	/**
	 * 外国人身份证号
	 */
	foreign_id?: string;
	/**
	 * 外国人国籍
	 */
	foreign_citizenship?: string;
	/**
	 * 外国人中文名
	 */
	foreign_chinese_name?: string;
	/**
	 * 外国人签证开始时间
	 */
	foreign_expire_start_day?: string;
	/**
	 * 外国人签证结束时间
	 */
	foreign_expire_end_day?: string;
	/**
	 * 外国人生日
	 */
	foreign_birth_day?: string;
	/**
	 * 外国人版本
	 */
	foreign_version_number?: string;
	/**
	 * 外国人单位编码
	 */
	foreign_department_code?: string;
	/**
	 * 外国人签证类型
	 */
	foreign_type_sign?: string;
	/**
	 * 附加数据
	 */
	foreign_reserved?: string;
	/**
	 * 特别行政区人员姓名
	 */
	hongkong_macao_taiwan_nameStr?: string;
	/**
	 * 特别行政区人员性别
	 */
	hongkong_macao_taiwan_sexStr?: string;
	/**
	 * 特别行政区人员生日
	 */
	hongkong_macao_taiwan_birth_dayStr?: string;
	/**
	 * 特别行政区人员住址
	 */
	hongkong_macao_taiwan_addressStr?: string;
	/**
	 * 特别行政区人员身份证号
	 */
	hongkong_macao_taiwan_idStr?: string;
	/**
	 * 特别行政区人员签发地址
	 */
	hongkong_macao_taiwan_officeStr?: string;
	/**
	 * 特别行政区人员有效开始日期
	 */
	hongkong_macao_taiwan_expire_start_dayStr?: string;
	/**
	 * 特别行政区人员有效截止日期
	 */
	hongkong_macao_taiwan_expire_end_dayStr?: string;
	/**
	 * 特别行政区人员驾照编码
	 */
	hongkong_macao_taiwan_traffic_permit_numStr?: string;
	/**
	 * 特别行政区人员签证时间
	 */
	hongkong_macao_taiwan_sign_issue_timeStr?: string;
	/**
	 * 图片十六进制文本
	 */
	photoDataHexStr?: string;
	/**
	 * 图片
	 */
	photoData?: ArrayBuffer;
	/**
	 * 图片Base64
	 */
	photoBase64?: string;
	/**
	 * 指纹
	 */
	fingerprintData?: ArrayBuffer;
	/**
	 * 附加数据
	 */
	extraData?: string;
};

/**
 * 读取社保卡选项
 */
export interface ReadSocialSecurityCardOptionsType {
	/**
	 * 卡片类型
	 * @param
	 * 1 - 接触式
	 * @param
	 * 2 - 非接式
	 * @param
	 * 3 - 自动，但是优先接触式
	 * @param
	 * 4 - 自动，但是优先非接式
	 */
	CardType?: 1 | 2 | 3 | 4;
};

/**
 * 社保卡
 */
export type SSCard = {
	/**
	 * 发卡地区行政区划代码（卡识别码前 6 位）
	 */
	CardIssuingPlaceNo?: string;
	/**
	 * 社会保障号码
	 */
	SocialSecurityNumber?: string;
	/**
	 * 卡号
	 */
	SocialSecurityCardNumber?: string;
	/**
	 * 卡识别码
	 */
	CardIdentificationCode?: string;
	/**
	 * 姓名
	 */
	Name?: string;
	/**
	 * 卡复位信息（仅取历史字节）
	 */
	CardResetInformation?: string;
	/**
	 * 规范版本
	 */
	CardCanonicalVersion?: string;
	/**
	 * 发卡日期
	 */
	IssuingDate?: string;
	/**
	 * 卡有效期
	 */
	ExpirationDate?: string;
	/**
	 * 终端机编号
	 */
	TerminalNumber?: string;
	/**
	 * 终端设备号
	 */
	TerminalEquipmentNumber?: string;
	/**
	 * 卡的类别-原始数据
	 */
	CardClassFlag?: string;
	/**
	 * 卡的类别
	 */
	CardClass?: string;
	/**
	 * 初始化机构编号
	 */
	InitializationStructureNumber?: string;
	/**
	 * 身份证号
	 */
	Id?: string;
	/**
	 * 姓名扩展
	 */
	NameExpand?: string;
	/**
	 * 性别-原始数据
	 */
	SexFlag?: string;
	/**
	 * 性别
	 */
	Sex?: string;
	/**
	 * 民族-原始数据
	 */
	NationFlag?: string;
	/**
	 * 民族
	 */
	Nation?: string;
	/**
	 * 出生地-原始数据
	 */
	BirthPlaceFlag?: string;
	/**
	 * 出生地
	 */
	BirthPlace?: string;
	/**
	 * 生日
	 */
	DateBirth?: string;
};

/**
 * 读取二维码选项
 */
export interface ReadQRCodeOptionsType {
	/**
	 * 超时时间，单位毫秒
	 */
	Timeout?: number;
};

/**
 * 二维码
 */
export type QRCode = {
	/**
	 *  二维码
	 */
	QRCode?: string;
};

/**
 * 循环选项
 */
export interface LoopOptionsType {
	/**
	 * 是否循环读取
	 */
	Loop?: boolean;
	/**
	 * 循环间隔
	 */
	Interval?: number;
};

/**
 * 循环读取身份证选项
 */
export interface LoopReadIdCardOptionsType extends ReadIdCardOptionsType, LoopOptionsType { };

/**
 * 循环读取社保卡选项
 */
export interface LoopReadSocialSecurityCardOptionsType extends ReadSocialSecurityCardOptionsType, LoopOptionsType { };

/**
 * 循环读取二维码选项
 */
export interface LoopReadQRCodeOptionsType extends ReadQRCodeOptionsType, LoopOptionsType { };

/**
 * 循环读取身份证回调
 */
export type LoopReadIdCardLoopCallBackType = (Data: IDCard) => void;

/**
 * 循环读取社保卡回调
 */
export type LoopReadSocialSecurityCardCallBackType = (Data: SSCard) => void;

/**
 * 循环读取二维码回调
 */
export type LoopReadQRCodeCallBackType = (Data: QRCode) => void;

export interface DecardPlugin {
	dcOpen(OpenOptions: OpenOptionsType): Promise<void>;
	dcExit(): Promise<void>;
	readIdCard(ReadIdCardOptions: ReadIdCardOptionsType): Promise<IDCard>;
	readSocialSecurityCard(ReadSocialSecurityCardOptions: ReadSocialSecurityCardOptionsType): Promise<SSCard>;
	readQRCode(ReadQRCodeOptions: ReadQRCodeOptionsType): Promise<QRCode>;
	loopReadIdCard(LoopReadIdCardOptions: LoopReadIdCardOptionsType, loopCallBack: LoopReadIdCardLoopCallBackType): Promise<string>;
	stopLoopReadIdCard(): void;
	loopReadSocialSecurityCard(LoopReadSocialSecurityCardOptions: LoopReadSocialSecurityCardOptionsType, loopCallBack: LoopReadSocialSecurityCardCallBackType): Promise<string>;
	stopLoopReadSocialSecurityCard(): void;
	loopReadQRCode(LoopReadQRCodeOptions: LoopReadQRCodeOptionsType, loopCallBack: LoopReadQRCodeCallBackType): Promise<string>;
	stopLoopReadQRCode(): void;
}
